--- title: "02-java switch基础介绍及具体使用 - Java 教程 - 编程导航教程" created: 2025-12-02 tags: - Java --- # java switch基础介绍及具体使用 - Java 教程 - 编程导航教程 > [!note] 本篇定位 > 专题深挖与资料:备忘单、反射深入、数组汇总、XML 解析、书籍推荐等 10 篇。本篇:**java switch基础介绍及具体使用 - Java 教程 - 编程导航教程**。正文为教程原貌(原话只增不改),代码块语言标记已补全。 在编写代码时,逻辑判断是避免不了的,switch case语句在很多编程语言中的功能都是用于条件判断,java中为多路分支选择流程专门提供了switch语句,switch语句根据一个表达式的值,选择运行多个操作中的一个。当需要对选项进行等值判断时,使用switch语句更加简洁明了。switch的case语句可以处理int,short,byte,char类型的值,但是不能处理long,String等类型。说起来你应该也会想到另一个常用的条件判断语句if else,本文重点介绍java中switch case语句的用法,但是会在篇末对两种语句的区别做一个总结。 ![[nkpgdeyr-e45bf253.jpeg]] ### java switch基础语法 ```java switch(表达式){ case 表达式常量1:语句1; break; case 表达式常量2:语句2; break; ...... case 表达式常量n:语句n; break; [default:语句n+1;] } ``` 其中,一个case表达式常量成为标号,代表一个case分支的入口。switch语句在运行时首先计算switch圆括号中“表达式”的值,这个值必须是整型或字符型的,同时后面各个case表达式常量的值的类型应与switch圆括号中“表达式”的值类型一致。一个case语句代表一个制定操作,然后转向结构出口。default子句是可选的,当表达式的值与case表达式常量的值都不匹配时,就运行default子句,转向结构出口。 ### java里switch的执行顺序 switch表达式的值决定选择哪个case分支,如果找不到相应的分支,就直接从"default" 开始输出。 当程序执行一条case语句后,因为例子中的case分支中没有break 和return语句,所以程序会执行紧接于其后的语句。 ```java public class Switch { public static void main(String[] args) { int x=0; switch(x) { default: System.out.println("default"); case 1: System.out.println(1); case 2: System.out.println(2); } } } ``` 输出结果如下: default 1 2 ```java public class Switch { public static void main(String[] args) { int x = 0; switch (x) { default: System.out.println("default"); case 0: System.out.println(0); case 1: System.out.println(1); case 2: System.out.println(2); } } } ``` 输出结果如下: 0 1 2 ```java public class Switch { public static void main(String[] args) { int x = 0; switch (x) { case 0: System.out.println(0); case 1: System.out.println(1); case 2: System.out.println(2); default: System.out.println("default"); } } } ``` 输出结果如下: 0 1 2 default ![[u6a3a82n-c76b0933.jpeg]] ### java switch语句注意事项 switch(A),括号中A的取值只能是整型或者可以转换为整型的数值类型,比如byte、short、int、char、还有枚举;需要强调的是:long和String类型是不能作用在switch语句上的。 case B:C;case是常量表达式,也就是说B的取值只能是常量(需要定义一个final型的常量,后面会详细介绍原因)或者int、byte、short、char(比如1、2、3、200000000000(注意了这是整型)),如果你需要在此处写一个表达式或者变量,那么就要加上单引号; case后的语句可以不用大括号,就是C不需要用大括号包裹着; default就是如果没有符合的case就执行它,default并不是必须的。 案例分析: 1.标准型(case后面都有break语句,case后的值都是整数) ```java int i=3; switch(i) { case 1: System.out.println(1); break; case 2: System.out.println(2); break; default: System.out.println("default"); break; } ``` 2.常量型(case后面都有break语句,case后的值都是常量) ```java private final int NUM1=1; private final int NUM2=1; int i=3; switch(i) { case NUM1: System.out.println(1); break; case NUM2: System.out.println(2); break; default: System.out.println("default"); break; } ``` 3.表达式型(case后面都有break语句,case后的值都是表达式) ```java int i=3; int b = 2; switch(i) { case ‘类名.getId()‘: System.out.println(1); break; case ‘b‘ System.out.println(2); break; default: System.out.println("default"); break; } ``` 实例:java 用switch语句解决月薪范围问题 ```java public class SwitchDemo { public static void main(String[] args) { int month = 8; String monthString; switch (month) { case 1: monthString = "January"; break; case 2: monthString = "February"; break; case 3: monthString = "March"; break; case 4: monthString = "April"; break; case 5: monthString = "May"; break; case 6: monthString = "June"; break; case 7: monthString = "July"; break; case 8: monthString = "August"; break; case 9: monthString = "September"; break; case 10: monthString = "October"; break; case 11: monthString = "November"; break; case 12: monthString = "December"; break; default: monthString = "Invalid month"; break; } System.out.println(monthString); } ``` ![[a54k90n0-28ed99d8.jpeg]] ### Java中switch和if语句的区别 switch和if语句都是Java的选择语句,这两种语句都是允许在程序运行时控制程序的执行过程。 switch和if-else相比,由于使用了Binary Tree算法,绝大部分情况下switch会快一点,除非是if-else的第一个条件就为true。 编译器编译switch与编译if...else...不同。不管有多少case,都直接跳转,不需逐个比较查询。 相比于if-else结构,switch的效率绝对是要高很多的,但是switch使用查找表的方式决定了case的条件必须是一个连续的常量。而if-else则可以灵活的多。   switch效率高,从汇编代码可以看出来。switch只计算一次值,然后都是test。 switch的效率与分支数无关。当只有分支比较少的时候,if效率比switch高(因为switch有跳转表)。分支比较多,那当然是使用switch。 --- ⬅️ [[01-Java 备忘单 - Java 教程 - 编程导航教程|Java 备忘单 - Java 教程 - 编程导航教程]] 🏠 [[00-鱼皮学习路线|鱼皮学习路线]] ➡️ [[03-完整的java数组操作应用知识汇总|完整的java数组操作应用知识汇总]]